﻿Public Class DAmuestras

    Dim bd As New BTTbdDataContext
    Public Function ListarTipoMuestras()

         
        Dim tipoMuestra = From tm In bd.tipo_muestras _
                     Select tm

        Return tipoMuestra
       
    End Function


    Public Function ListarOrganos()
        Dim organos = From org In bd.organos _
                     Select org

        Return organos

    End Function

    Public Function ListarEstados()
        Dim estados = From est In bd.estado_muestras _
                      Select est

        Return estados
    End Function

    Public Function BuscarMuestras(ByVal pCodigo As Integer, ByVal pPaciente As Integer, _
                                   ByVal pMedico As String, ByVal pDiagnositco As String, _
                                   ByVal pProtocolo As String, ByVal pEdadIni As Integer, ByVal pEdadFin As Integer, _
                                   ByVal cSexo As Char, ByVal pTipMuestra As Integer, ByVal pOrgano As Integer, _
                                   ByVal pFecIni As Date, ByVal pFechFin As Date, ByVal pFechas As Boolean)

        ', equipo In bd.equipos, personal In bd.personals _
        If pCodigo <> Nothing Then
            Dim query = From muestra In bd.muestras, tipMuestra In bd.tipo_muestras, paciente In bd.pacientes, _
                        diagnostico In bd.diagnosticos, personal In bd.personals, dpto In bd.dpto_quirurgicos, _
                        org In bd.organos _
                        Where muestra.id_muestra = pCodigo _
                        And tipMuestra.id_tipo_muestra = muestra.id_tipomuestra _
                        And paciente.id_paciente = muestra.id_paciente _
                        And diagnostico.id_diagnostico = muestra.id_diagnostico _
                        And personal.id_personal = muestra.id_personal _
                        And dpto.id_dpto = muestra.id_dpto _
                        And org.id_organo = muestra.id_organo _
                        Select New With { _
                                        .codigo = muestra.id_muestra, _
                                        .tipoMuestra = tipMuestra.nombre, _
                                        .paciente = paciente.nombre + " " + paciente.apellido_pat, _
                                        .edad = muestra.edad, _
                                        .sexo = paciente.sexo, _
                                        .diagnostico = diagnostico.diag_general + " " + diagnostico.diag_especifico, _
                                        .organo = org.nomOrg, _
                                        .medico = personal.nombre + " " + personal.apellido_pat, _
                                        .departamento = dpto.nomDpto, _
                                        .fechaIng = muestra.fecha_ingreso, _
                                        .observaciones = muestra.observaciones _
                                         }
            Return query
        End If

        Dim Tquery As System.Linq.IQueryable(Of BTTsoft.muestra)

        If pPaciente <> Nothing And pPaciente <> 0 Then
            Tquery = From muestra In bd.muestras _
                                 Where muestra.paciente.id_paciente = pPaciente _
                                 Select muestra
        Else
            Tquery = From muestra In bd.muestras _
                          Select muestra

        End If

        If pMedico <> Nothing And pMedico <> 0 Then
            Tquery = From muestra In Tquery _
                                Where muestra.personal.id_personal = pMedico _
                                'Select muestra
        End If


        If ((pEdadIni <> Nothing And pEdadIni <> 0) And (pEdadFin <> Nothing And pEdadFin <> 0)) Then
            Tquery = From muestra In Tquery _
                                Where muestra.edad >= pEdadIni _
                                And muestra.edad <= pEdadFin _
                                'Select muestra
        End If

        If cSexo <> " " And cSexo <> Nothing Then

            Tquery = From muestra In Tquery _
                               Where muestra.paciente.sexo = cSexo _
                               'Select muestra
        End If



        If pDiagnositco <> Nothing And pDiagnositco <> 0 Then
            Tquery = From muestra In Tquery _
                                Where muestra.diagnostico.id_diagnostico = pDiagnositco

        End If

        If pOrgano <> Nothing And pOrgano <> 0 Then
            Tquery = From muestra In Tquery _
                                Where muestra.organo.id_organo = pOrgano
        End If

        If pFechas Then

            Tquery = From muestra In Tquery _
                     Where muestra.fecha_ingreso >= pFecIni _
                     And muestra.fecha_ingreso <= pFechFin
        End If

        Dim result = From muestra In Tquery, tipMuestra In bd.tipo_muestras, paciente In bd.pacientes, _
                        diagnostico In bd.diagnosticos, personal In bd.personals, dpto In bd.dpto_quirurgicos, _
                        org In bd.organos _
                        Where tipMuestra.id_tipo_muestra = muestra.id_tipomuestra _
                        And paciente.id_paciente = muestra.id_paciente _
                        And diagnostico.id_diagnostico = muestra.id_diagnostico _
                        And personal.id_personal = muestra.id_personal _
                        And dpto.id_dpto = muestra.id_dpto _
                        And org.id_organo = muestra.id_organo _
                        Select New With { _
                                            .codigo = muestra.id_muestra, _
                                            .tipoMuestra = tipMuestra.nombre, _
                                            .paciente = paciente.nombre + " " + paciente.apellido_pat, _
                                            .edad = muestra.edad, _
                                            .sexo = paciente.sexo, _
                                            .diagnostico = diagnostico.diag_general + " " + diagnostico.diag_especifico, _
                                            .organo = org.nomOrg, _
                                            .medico = personal.nombre + " " + personal.apellido_pat, _
                                            .departamento = dpto.nomDpto, _
                                            .fechaIng = muestra.fecha_ingreso, _
                                            .observaciones = muestra.observaciones _
                                             }
        Return result
    End Function

    Public Function buscarMuestraMod(ByVal pCodMuestras As Integer)

        Dim muestra = bd.muestras.Single(Function(m As muestra) m.id_muestra = pCodMuestras)
        Return muestra

    End Function

    Public Sub GuardarMuestra(ByVal pMuestras As BEmuestras, ByVal pTejidos As BEtejido)
        Dim auxMuestra As muestra
        Dim tTejido As tejido
        If (pMuestras._CodMuestra <> 0) Then
            auxMuestra = bd.muestras.Single(Function(m As muestra) m.id_muestra = pMuestras._CodMuestra)
            tTejido = bd.tejidos.Single(Function(t As tejido) t.id_tejido = pTejidos._codTejido)
        Else
            auxMuestra = New muestra
            tTejido = New tejido
        End If
  
        LLenarDatos(auxMuestra, pMuestras, Constantes.TEJIDO)
        tTejido.descripción = pTejidos._descripcion
        tTejido.morfologia = pTejidos._morfologia
        tTejido.peso = pTejidos._peso
        tTejido.id_tejido = auxMuestra.id_muestra

        Try
            If (pMuestras._CodMuestra = 0) Then
                bd.tejidos.InsertOnSubmit(tTejido)
            End If
            bd.SubmitChanges()
            MsgBox("La muestra fue guardada exitosamente")
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub


    Public Sub GuardarMuestra(ByVal pMuestras As BEmuestras, ByVal pSangre As BEsangre)

        Dim auxMuestra As muestra
        Dim tSangre As sangre

        If (pMuestras._CodMuestra <> 0) Then
            auxMuestra = bd.muestras.Single(Function(m As muestra) m.id_muestra = pMuestras._CodMuestra)
            tSangre = bd.sangres.Single(Function(s As sangre) s.id_sangre = pSangre._codSangre)
        Else
            auxMuestra = New muestra
            tSangre = New sangre
        End If
        LLenarDatos(auxMuestra, pMuestras, Constantes.SANGRE)
        tSangre.cantidad = pSangre._cantidad
        tSangre.id_sangre = auxMuestra.id_muestra
        Try
            If (pMuestras._CodMuestra = 0) Then
                bd.sangres.InsertOnSubmit(tSangre)
            End If
            bd.SubmitChanges()
            MsgBox("La muestra fue guardada exitosamente")
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub


    Public Sub GuardarMuestra(ByVal pMuestras As BEmuestras, ByVal pParafina As BEparafina)

        Dim auxMuestra As New muestra
        Dim tparafina As New parafina

        If (pMuestras._CodMuestra <> 0) Then
            auxMuestra = bd.muestras.Single(Function(m As muestra) m.id_muestra = pMuestras._CodMuestra)
            tparafina = bd.parafinas.Single(Function(s As parafina) s.id_parafina = pParafina._codParafina)
        Else
            auxMuestra = New muestra
            tparafina = New parafina
        End If
        LLenarDatos(auxMuestra, pMuestras, Constantes.PARAFINA)
        tparafina.id_tejido = pParafina._codTejido
        tparafina.id_parafina = auxMuestra.id_muestra

        Try
            If (pMuestras._CodMuestra = 0) Then
                bd.parafinas.InsertOnSubmit(tparafina)
            End If
            bd.SubmitChanges()
            MsgBox("La muestra fue guardada exitosamente")
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub

    Public Sub GuardarMuestra(ByVal pMuestras As BEmuestras, ByVal pLamina As BElamina)

        Dim auxMuestra As New muestra
        Dim tLamina As New lamina

        If (pMuestras._CodMuestra <> 0) Then
            auxMuestra = bd.muestras.Single(Function(m As muestra) m.id_muestra = pMuestras._CodMuestra)
            tLamina = bd.laminas.Single(Function(s As lamina) s.id_lamina = pLamina._codLamina)
        Else
            auxMuestra = New muestra
            tLamina = New lamina
        End If

        LLenarDatos(auxMuestra, pMuestras, Constantes.LAMINA)
        tLamina.id_parafina = pLamina._codParafina
        tLamina.id_lamina = auxMuestra.id_muestra

        Try
            If (pMuestras._CodMuestra = 0) Then
                bd.laminas.InsertOnSubmit(tLamina)
            End If
            bd.SubmitChanges()
            MsgBox("La muestra fue guardada exitosamente")
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub

    Public Sub LLenarDatos(ByRef tMuestra As muestra, ByVal auxMuestras As BEmuestras, ByVal tipo_muestra As Integer)

        tMuestra.fecha_ingreso = Date.Today
        tMuestra.id_paciente = auxMuestras._codPaciente
        tMuestra.id_organo = auxMuestras._codOrgano
        tMuestra.id_diagnostico = auxMuestras._codDiagnostico
        tMuestra.id_personal = auxMuestras._codPersonal
        tMuestra.tejido_normal = auxMuestras._tejidoNormal
        tMuestra.vih = auxMuestras._vih
        tMuestra.edad = auxMuestras._edad
        tMuestra.id_estado = auxMuestras._codEstado
        tMuestra.observaciones = auxMuestras._observaciones
        tMuestra.id_tipomuestra = tipo_muestra
        tMuestra.id_dpto = 1 'Departamente Quirurgico HARDCODE

        Try
            If (auxMuestras._CodMuestra = 0) Then
                bd.muestras.InsertOnSubmit(tMuestra)
            End If
            bd.SubmitChanges()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub

End Class
